<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<meta name="theme-color" content="#33474d">
	<title>MySQL性能调优my.cnf详解 | 失落的乐章</title>
	<link rel="stylesheet" href="/css/style.css" />
	
      <link rel="alternate" href="/atom.xml" title="失落的乐章" type="application/atom+xml">
    
</head>

<body>

	<header class="header">
		<nav class="header__nav">
			
				<a href="/archives" class="header__link">Archive</a>
			
				<a href="/tags" class="header__link">Tags</a>
			
				<a href="/atom.xml" class="header__link">RSS</a>
			
		</nav>
		<h1 class="header__title"><a href="/">失落的乐章</a></h1>
		<h2 class="header__subtitle">技术面前，永远都是学生。</h2>
	</header>

	<main>
		<article>
	
		<h1>MySQL性能调优my.cnf详解</h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/MySQL/">MySQL</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;提供一个MySQL 5.6版本适合在1GB内存VPS上的my.cnf配置文件</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div></pre></td><td class="code"><pre><div class="line">[client]</div><div class="line">port = 3306</div><div class="line">socket = /tmp/mysql.sock</div><div class="line"></div><div class="line">[mysqld]</div><div class="line">port = 3306</div><div class="line">socket = /tmp/mysql.sock</div><div class="line"></div><div class="line">basedir = /usr/<span class="built_in">local</span>/mysql</div><div class="line">datadir = /data/mysql</div><div class="line">pid-file = /data/mysql/mysql.pid</div><div class="line">user = mysql</div><div class="line"><span class="built_in">bind</span>-address = 0.0.0.0</div><div class="line">server-id = 1</div><div class="line"></div><div class="line">skip-name-resolve</div><div class="line"><span class="comment">#skip-networking</span></div><div class="line">back_log = 600</div><div class="line"></div><div class="line">max_connections = 1000</div><div class="line">max_connect_errors = 6000</div><div class="line">open_files_limit = 65535</div><div class="line">table_open_cache = 128 </div><div class="line">max_allowed_packet = 4M</div><div class="line">binlog_cache_size = 1M</div><div class="line">max_heap_table_size = 8M</div><div class="line">tmp_table_size = 16M</div><div class="line"></div><div class="line">read_buffer_size = 2M</div><div class="line">read_rnd_buffer_size = 8M</div><div class="line">sort_buffer_size = 8M</div><div class="line">join_buffer_size = 8M</div><div class="line">key_buffer_size = 4M</div><div class="line"></div><div class="line">thread_cache_size = 8</div><div class="line"></div><div class="line">query_cache_size = 8M</div><div class="line">query_cache_limit = 2M</div><div class="line"></div><div class="line">ft_min_word_len = 4</div><div class="line"></div><div class="line">log_bin = mysql-bin</div><div class="line">binlog_format = mixed</div><div class="line">expire_logs_days = 30</div><div class="line"></div><div class="line">log_error = /data/mysql/mysql-error.log</div><div class="line">slow_query_log = 1</div><div class="line">long_query_time = 1</div><div class="line">slow_query_log_file = /data/mysql/mysql-slow.log</div><div class="line"></div><div class="line">performance_schema = 0</div><div class="line">explicit_defaults_for_timestamp</div><div class="line"></div><div class="line"><span class="comment">#lower_case_table_names = 1</span></div><div class="line"></div><div class="line">skip-external-locking</div><div class="line"></div><div class="line">default_storage_engine = InnoDB</div><div class="line"><span class="comment">#default-storage-engine = MyISAM</span></div><div class="line">innodb_file_per_table = 1</div><div class="line">innodb_open_files = 500</div><div class="line">innodb_buffer_pool_size = 64M</div><div class="line">innodb_write_io_threads = 4</div><div class="line">innodb_read_io_threads = 4</div><div class="line">innodb_thread_concurrency = 0</div><div class="line">innodb_purge_threads = 1</div><div class="line">innodb_flush_log_at_trx_commit = 2</div><div class="line">innodb_log_buffer_size = 2M</div><div class="line">innodb_log_file_size = 32M</div><div class="line">innodb_log_files_in_group = 3</div><div class="line">innodb_max_dirty_pages_pct = 90</div><div class="line">innodb_lock_wait_timeout = 120</div><div class="line"></div><div class="line">bulk_insert_buffer_size = 8M</div><div class="line">myisam_sort_buffer_size = 8M</div><div class="line">myisam_max_sort_file_size = 10G</div><div class="line">myisam_repair_threads = 1</div><div class="line"></div><div class="line">interactive_timeout = 28800</div><div class="line">wait_timeout = 28800</div><div class="line"></div><div class="line">[mysqldump]</div><div class="line">quick</div><div class="line">max_allowed_packet = 16M</div><div class="line"></div><div class="line">[myisamchk]</div><div class="line">key_buffer_size = 8M</div><div class="line">sort_buffer_size = 8M</div><div class="line">read_buffer = 4M</div><div class="line">write_buffer = 4M</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;详细说明</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div><div class="line">107</div><div class="line">108</div><div class="line">109</div><div class="line">110</div><div class="line">111</div><div class="line">112</div><div class="line">113</div><div class="line">114</div><div class="line">115</div><div class="line">116</div><div class="line">117</div><div class="line">118</div><div class="line">119</div><div class="line">120</div><div class="line">121</div><div class="line">122</div><div class="line">123</div><div class="line">124</div><div class="line">125</div><div class="line">126</div><div class="line">127</div><div class="line">128</div><div class="line">129</div><div class="line">130</div><div class="line">131</div><div class="line">132</div><div class="line">133</div><div class="line">134</div><div class="line">135</div><div class="line">136</div><div class="line">137</div><div class="line">138</div><div class="line">139</div><div class="line">140</div><div class="line">141</div><div class="line">142</div><div class="line">143</div><div class="line">144</div><div class="line">145</div><div class="line">146</div><div class="line">147</div><div class="line">148</div><div class="line">149</div><div class="line">150</div><div class="line">151</div><div class="line">152</div><div class="line">153</div><div class="line">154</div><div class="line">155</div><div class="line">156</div><div class="line">157</div><div class="line">158</div><div class="line">159</div><div class="line">160</div><div class="line">161</div><div class="line">162</div><div class="line">163</div><div class="line">164</div><div class="line">165</div><div class="line">166</div><div class="line">167</div><div class="line">168</div><div class="line">169</div><div class="line">170</div><div class="line">171</div><div class="line">172</div><div class="line">173</div><div class="line">174</div><div class="line">175</div><div class="line">176</div><div class="line">177</div><div class="line">178</div><div class="line">179</div><div class="line">180</div><div class="line">181</div><div class="line">182</div><div class="line">183</div><div class="line">184</div><div class="line">185</div><div class="line">186</div><div class="line">187</div><div class="line">188</div><div class="line">189</div><div class="line">190</div><div class="line">191</div><div class="line">192</div><div class="line">193</div><div class="line">194</div><div class="line">195</div><div class="line">196</div><div class="line">197</div><div class="line">198</div><div class="line">199</div><div class="line">200</div><div class="line">201</div><div class="line">202</div><div class="line">203</div><div class="line">204</div><div class="line">205</div><div class="line">206</div><div class="line">207</div><div class="line">208</div><div class="line">209</div><div class="line">210</div><div class="line">211</div><div class="line">212</div><div class="line">213</div><div class="line">214</div><div class="line">215</div><div class="line">216</div><div class="line">217</div><div class="line">218</div><div class="line">219</div><div class="line">220</div><div class="line">221</div></pre></td><td class="code"><pre><div class="line">[client] </div><div class="line">port = 3306 </div><div class="line">socket = /tmp/mysql.sock </div><div class="line"></div><div class="line">[mysqld] </div><div class="line">port = 3306 </div><div class="line">socket = /tmp/mysql.sock </div><div class="line"></div><div class="line">basedir = /usr/<span class="built_in">local</span>/mysql </div><div class="line">datadir = /data/mysql </div><div class="line">pid-file = /data/mysql/mysql.pid </div><div class="line">user = mysql </div><div class="line"><span class="built_in">bind</span>-address = 0.0.0.0 </div><div class="line">server-id = 1 <span class="comment">#表示是本机的序号为1,一般来讲就是master的意思 </span></div><div class="line"></div><div class="line">skip-name-resolve </div><div class="line"><span class="comment"># 禁止MySQL对外部连接进行DNS解析，使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意，如果开启该选项， </span></div><div class="line"><span class="comment"># 则所有远程主机连接授权都要使用IP地址方式，否则MySQL将无法正常处理连接请求 </span></div><div class="line"></div><div class="line"><span class="comment">#skip-networking </span></div><div class="line"></div><div class="line">back_log = 600 </div><div class="line"><span class="comment"># MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求，这就起作用， </span></div><div class="line"><span class="comment"># 然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。 </span></div><div class="line"><span class="comment"># 如果期望在一个短时间内有很多连接，你需要增加它。也就是说，如果MySQL的连接数据达到max_connections时，新来的请求将会被存在堆栈中， </span></div><div class="line"><span class="comment"># 以等待某一连接释放资源，该堆栈的数量即back_log，如果等待连接的数量超过back_log，将不被授予连接资源。 </span></div><div class="line"><span class="comment"># 另外，这值（back_log）限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。 </span></div><div class="line"><span class="comment"># 你的操作系统在这个队列大小上有它自己的限制（可以检查你的OS文档找出这个变量的最大值），试图设定back_log高于你的操作系统的限制将是无效的。 </span></div><div class="line"></div><div class="line">max_connections = 1000 </div><div class="line"><span class="comment"># MySQL的最大连接数，如果服务器的并发连接请求量比较大，建议调高此值，以增加并行连接数量，当然这建立在机器能支撑的情况下，因为如果连接数越多，介于MySQL会为每个连接提供连接缓冲区，就会开销越多的内存，所以要适当调整该值，不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量，以定夺该值的大小。 </span></div><div class="line"></div><div class="line">max_connect_errors = 6000 </div><div class="line"><span class="comment"># 对于同一主机，如果有超出该参数值个数的中断错误连接，则该主机将被禁止连接。如需对该主机进行解禁，执行：FLUSH HOST。 </span></div><div class="line"></div><div class="line">open_files_limit = 65535 </div><div class="line"><span class="comment"># MySQL打开的文件描述符限制，默认最小1024;当open_files_limit没有被配置的时候，比较max_connections*5和ulimit -n的值，哪个大用哪个， </span></div><div class="line"><span class="comment"># 当open_file_limit被配置的时候，比较open_files_limit和max_connections*5的值，哪个大用哪个。 </span></div><div class="line"></div><div class="line">table_open_cache = 128 </div><div class="line"><span class="comment"># MySQL每打开一个表，都会读入一些数据到table_open_cache缓存中，当MySQL在这个缓存中找不到相应信息时，才会去磁盘上读取。默认值64 </span></div><div class="line"><span class="comment"># 假定系统有200个并发连接，则需将此参数设置为200*N(N为每个连接所需的文件描述符数目)； </span></div><div class="line"><span class="comment"># 当把table_open_cache设置为很大时，如果系统处理不了那么多文件描述符，那么就会出现客户端失效，连接不上 </span></div><div class="line"></div><div class="line">max_allowed_packet = 4M </div><div class="line"><span class="comment"># 接受的数据包大小；增加该变量的值十分安全，这是因为仅当需要时才会分配额外内存。例如，仅当你发出长查询或MySQLd必须返回大的结果行时MySQLd才会分配更多内存。 </span></div><div class="line"><span class="comment"># 该变量之所以取较小默认值是一种预防措施，以捕获客户端和服务器之间的错误信息包，并确保不会因偶然使用大的信息包而导致内存溢出。 </span></div><div class="line"></div><div class="line">binlog_cache_size = 1M </div><div class="line"><span class="comment"># 一个事务，在没有提交的时候，产生的日志，记录到Cache中；等到事务提交需要提交的时候，则把日志持久化到磁盘。默认binlog_cache_size大小32K </span></div><div class="line"></div><div class="line">max_heap_table_size = 8M </div><div class="line"><span class="comment"># 定义了用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变 </span></div><div class="line"></div><div class="line">tmp_table_size = 16M </div><div class="line"><span class="comment"># MySQL的heap（堆积）表缓冲大小。所有联合在一个DML指令内完成，并且大多数联合甚至可以不用临时表即可以完成。 </span></div><div class="line"><span class="comment"># 大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。 </span></div><div class="line"><span class="comment"># 如果某个内部heap（堆积）表大小超过tmp_table_size，MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说，如果调高该值，MySQL同时将增加heap表的大小，可达到提高联接查询速度的效果 </span></div><div class="line"></div><div class="line">read_buffer_size = 2M </div><div class="line"><span class="comment"># MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区，MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。 </span></div><div class="line"><span class="comment"># 如果对表的顺序扫描请求非常频繁，并且你认为频繁扫描进行得太慢，可以通过增加该变量值以及内存缓冲区大小提高其性能 </span></div><div class="line"></div><div class="line">read_rnd_buffer_size = 8M </div><div class="line"><span class="comment"># MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如，按照排序顺序)，将分配一个随机读缓存区。进行排序查询时， </span></div><div class="line"><span class="comment"># MySQL会首先扫描一遍该缓冲，以避免磁盘搜索，提高查询速度，如果需要排序大量数据，可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间，所以应尽量适当设置该值，以避免内存开销过大 </span></div><div class="line"></div><div class="line">sort_buffer_size = 8M </div><div class="line"><span class="comment"># MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度，首先看是否可以让MySQL使用索引而不是额外的排序阶段。 </span></div><div class="line"><span class="comment"># 如果不能，可以尝试增加sort_buffer_size变量的大小 </span></div><div class="line"></div><div class="line">join_buffer_size = 8M </div><div class="line"><span class="comment"># 联合查询操作所能使用的缓冲区大小，和sort_buffer_size一样，该参数对应的分配内存也是每连接独享 </span></div><div class="line"></div><div class="line">thread_cache_size = 8 </div><div class="line"><span class="comment"># 这个值（默认8）表示可以重新利用保存在缓存中线程的数量，当断开连接时如果缓存中还有空间，那么客户端的线程将被放到缓存中， </span></div><div class="line"><span class="comment"># 如果线程重新被请求，那么请求将从缓存中读取,如果缓存中是空的或者是新的请求，那么这个线程将被重新创建,如果有很多新的线程， </span></div><div class="line"><span class="comment"># 增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量，可以看到这个变量的作用。(–&gt;表示要调整的值) </span></div><div class="line"><span class="comment"># 根据物理内存设置规则如下： </span></div><div class="line"><span class="comment"># 1G —&gt; 8 </span></div><div class="line"><span class="comment"># 2G —&gt; 16 </span></div><div class="line"><span class="comment"># 3G —&gt; 32 </span></div><div class="line"><span class="comment"># 大于3G —&gt; 64 </span></div><div class="line"></div><div class="line">query_cache_size = 8M </div><div class="line"><span class="comment">#MySQL的查询缓冲大小（从4.0.1开始，MySQL提供了查询缓冲机制）使用查询缓冲，MySQL将SELECT语句和查询结果存放在缓冲区中， </span></div><div class="line"><span class="comment"># 今后对于同样的SELECT语句（区分大小写），将直接从缓冲区中读取结果。根据MySQL用户手册，使用查询缓冲最多可以达到238%的效率。 </span></div><div class="line"><span class="comment"># 通过检查状态值'Qcache_%'，可以知道query_cache_size设置是否合理：如果Qcache_lowmem_prunes的值非常大，则表明经常出现缓冲不够的情况， </span></div><div class="line"><span class="comment"># 如果Qcache_hits的值也非常大，则表明查询缓冲使用非常频繁，此时需要增加缓冲大小；如果Qcache_hits的值不大，则表明你的查询重复率很低， </span></div><div class="line"><span class="comment"># 这种情况下使用查询缓冲反而会影响效率，那么可以考虑不用查询缓冲。此外，在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲 </span></div><div class="line"></div><div class="line">query_cache_limit = 2M </div><div class="line"><span class="comment">#指定单个查询能够使用的缓冲区大小，默认1M </span></div><div class="line"></div><div class="line">key_buffer_size = 4M </div><div class="line"><span class="comment">#指定用于索引的缓冲区大小，增加它可得到更好处理的索引(对所有读和多重写)，到你能负担得起那样多。如果你使它太大， </span></div><div class="line"><span class="comment"># 系统将开始换页并且真的变慢了。对于内存在4GB左右的服务器该参数可设置为384M或512M。通过检查状态值Key_read_requests和Key_reads， </span></div><div class="line"><span class="comment"># 可以知道key_buffer_size设置是否合理。比例key_reads/key_read_requests应该尽可能的低， </span></div><div class="line"><span class="comment"># 至少是1:100，1:1000更好(上述状态值可以使用SHOW STATUS LIKE 'key_read%'获得)。注意：该参数值设置的过大反而会是服务器整体效率降低 </span></div><div class="line"></div><div class="line">ft_min_word_len = 4 </div><div class="line"><span class="comment"># 分词词汇最小长度，默认4 </span></div><div class="line"></div><div class="line">transaction_isolation = REPEATABLE-READ </div><div class="line"><span class="comment"># MySQL支持4种事务隔离级别，他们分别是： </span></div><div class="line"><span class="comment"># READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. </span></div><div class="line"><span class="comment"># 如没有指定，MySQL默认采用的是REPEATABLE-READ，ORACLE默认的是READ-COMMITTED </span></div><div class="line"></div><div class="line">log_bin = mysql-bin </div><div class="line">binlog_format = mixed </div><div class="line">expire_logs_days = 30 <span class="comment">#超过30天的binlog删除 </span></div><div class="line"></div><div class="line">log_error = /data/mysql/mysql-error.log <span class="comment">#错误日志路径 </span></div><div class="line">slow_query_log = 1 </div><div class="line">long_query_time = 1 <span class="comment">#慢查询时间 超过1秒则为慢查询 </span></div><div class="line">slow_query_log_file = /data/mysql/mysql-slow.log </div><div class="line"></div><div class="line">performance_schema = 0 </div><div class="line">explicit_defaults_for_timestamp </div><div class="line"></div><div class="line"><span class="comment">#lower_case_table_names = 1 #不区分大小写 </span></div><div class="line"></div><div class="line">skip-external-locking <span class="comment">#MySQL选项以避免外部锁定。该选项默认开启 </span></div><div class="line"></div><div class="line">default-storage-engine = InnoDB <span class="comment">#默认存储引擎 </span></div><div class="line"></div><div class="line">innodb_file_per_table = 1 </div><div class="line"><span class="comment"># InnoDB为独立表空间模式，每个数据库的每个表都会生成一个数据空间 </span></div><div class="line"><span class="comment"># 独立表空间优点： </span></div><div class="line"><span class="comment"># 1．每个表都有自已独立的表空间。 </span></div><div class="line"><span class="comment"># 2．每个表的数据和索引都会存在自已的表空间中。 </span></div><div class="line"><span class="comment"># 3．可以实现单表在不同的数据库中移动。 </span></div><div class="line"><span class="comment"># 4．空间可以回收（除drop table操作处，表空不能自已回收） </span></div><div class="line"><span class="comment"># 缺点： </span></div><div class="line"><span class="comment"># 单表增加过大，如超过100G </span></div><div class="line"><span class="comment"># 结论： </span></div><div class="line"><span class="comment"># 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时，请合理调整：innodb_open_files </span></div><div class="line"></div><div class="line">innodb_open_files = 500 </div><div class="line"><span class="comment"># 限制Innodb能打开的表的数据，如果库里的表特别多的情况，请增加这个。这个值默认是300 </span></div><div class="line"></div><div class="line">innodb_buffer_pool_size = 64M </div><div class="line"><span class="comment"># InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM. </span></div><div class="line"><span class="comment"># 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少. </span></div><div class="line"><span class="comment"># 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80% </span></div><div class="line"><span class="comment"># 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸. </span></div><div class="line"><span class="comment"># 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制, </span></div><div class="line"><span class="comment"># 所以不要设置的太高. </span></div><div class="line"></div><div class="line">innodb_write_io_threads = 4 </div><div class="line">innodb_read_io_threads = 4 </div><div class="line"><span class="comment"># innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4 </span></div><div class="line"><span class="comment"># 注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里，修改完后重启MySQL服务,允许值的范围从 1-64 </span></div><div class="line"></div><div class="line">innodb_thread_concurrency = 0 </div><div class="line"><span class="comment"># 默认设置为 0,表示不限制并发数，这里推荐设置为0，更好去发挥CPU多核处理能力，提高并发量 </span></div><div class="line"></div><div class="line">innodb_purge_threads = 1 </div><div class="line"><span class="comment"># InnoDB中的清除操作是一类定期回收无用数据的操作。在之前的几个版本中，清除操作是主线程的一部分，这意味着运行时它可能会堵塞其它的数据库操作。 </span></div><div class="line"><span class="comment"># 从MySQL5.5.X版本开始，该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置innodb_purge_threads配置参数来选择清除操作是否使用单 </span></div><div class="line"><span class="comment"># 独线程,默认情况下参数设置为0(不使用单独线程),设置为 1 时表示使用单独的清除线程。建议为1 </span></div><div class="line"></div><div class="line">innodb_flush_log_at_trx_commit = 2 </div><div class="line"><span class="comment"># 0：如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘，提交事务的时候不做任何操作（执行是由mysql的master thread线程来执行的。 </span></div><div class="line"><span class="comment"># 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交）默认的日志文件是ib_logfile0,ib_logfile1 </span></div><div class="line"><span class="comment"># 1：当设为默认值1的时候，每次提交事务的时候，都会将log buffer刷写到日志。 </span></div><div class="line"><span class="comment"># 2：如果设为2,每次提交事务都会写日志，但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是，并不能保证100%每秒一定都会刷到磁盘，这要取决于进程的调度。 </span></div><div class="line"><span class="comment"># 每次事务提交的时候将数据写入事务日志，而这里的写入仅是调用了文件系统的写入操作，而文件系统是有 缓存的，所以这个写入并不能保证数据已经写入到物理磁盘 </span></div><div class="line"><span class="comment"># 默认值1是为了保证完整的ACID。当然，你可以将这个配置项设为1以外的值来换取更高的性能，但是在系统崩溃的时候，你将会丢失1秒的数据。 </span></div><div class="line"><span class="comment"># 设为0的话，mysqld进程崩溃的时候，就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。 </span></div><div class="line"><span class="comment"># 总结 </span></div><div class="line"><span class="comment"># 设为1当然是最安全的，但性能页是最差的（相对其他两个参数而言，但不是不能接受）。如果对数据一致性和完整性要求不高，完全可以设为2，如果只最求性能，例如高并发写的日志服务器，设为0来获得更高性能 </span></div><div class="line"></div><div class="line">innodb_log_buffer_size = 2M </div><div class="line"><span class="comment"># 此参数确定些日志文件所用的内存大小，以M为单位。缓冲区更大能提高性能，但意外的故障将会丢失数据。MySQL开发人员建议设置为1－8M之间 </span></div><div class="line"></div><div class="line">innodb_log_file_size = 32M </div><div class="line"><span class="comment"># 此参数确定数据日志文件的大小，更大的设置可以提高性能，但也会增加恢复故障数据库所需的时间 </span></div><div class="line"></div><div class="line">innodb_log_files_in_group = 3 </div><div class="line"><span class="comment"># 为提高性能，MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3 </span></div><div class="line"></div><div class="line">innodb_max_dirty_pages_pct = 90 </div><div class="line"><span class="comment"># innodb主线程刷新缓存池中的数据，使脏数据比例小于90% </span></div><div class="line"></div><div class="line">innodb_lock_wait_timeout = 120 </div><div class="line"><span class="comment"># InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒 </span></div><div class="line"></div><div class="line">bulk_insert_buffer_size = 8M </div><div class="line"><span class="comment"># 批量插入缓存大小， 这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时， 提高效率。默认值是8M。可以针对数据量的大小，翻倍增加。 </span></div><div class="line"></div><div class="line">myisam_sort_buffer_size = 8M </div><div class="line"><span class="comment"># MyISAM设置恢复表之时使用的缓冲区的尺寸，当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区 </span></div><div class="line"></div><div class="line">myisam_max_sort_file_size = 10G </div><div class="line"><span class="comment"># 如果临时文件会变得超过索引，不要使用快速排序索引方法来创建一个索引。注释：这个参数以字节的形式给出 </span></div><div class="line"></div><div class="line">myisam_repair_threads = 1 </div><div class="line"><span class="comment"># 如果该值大于1，在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内) </span></div><div class="line"></div><div class="line">interactive_timeout = 28800 </div><div class="line"><span class="comment"># 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值：28800秒（8小时） </span></div><div class="line"></div><div class="line">wait_timeout = 28800 </div><div class="line"><span class="comment"># 服务器关闭非交互连接之前等待活动的秒数。在线程启动时，根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值， </span></div><div class="line"><span class="comment"># 取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。参数默认值：28800秒（8小时） </span></div><div class="line"><span class="comment"># MySQL服务器所支持的最大连接数是有上限的，因为每个连接的建立都会消耗内存，因此我们希望客户端在连接到MySQL Server处理完相应的操作后， </span></div><div class="line"><span class="comment"># 应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接，他们不仅会白白消耗内存，而且如果连接一直在累加而不断开， </span></div><div class="line"><span class="comment"># 最终肯定会达到MySQL Server的连接上限数，这会报'too many connections'的错误。对于wait_timeout的值设定，应该根据系统的运行情况来判断。 </span></div><div class="line"><span class="comment"># 在系统运行一段时间后，可以通过show processlist命令查看当前系统的连接状态，如果发现有大量的sleep状态的连接进程，则说明该参数设置的过大， </span></div><div class="line"><span class="comment"># 可以进行适当的调整小些。要同时设置interactive_timeout和wait_timeout才会生效。 </span></div><div class="line"></div><div class="line">[mysqldump] </div><div class="line">quick </div><div class="line">max_allowed_packet = 16M <span class="comment">#服务器发送和接受的最大包长度 </span></div><div class="line"></div><div class="line">[myisamchk] </div><div class="line">key_buffer_size = 8M </div><div class="line">sort_buffer_size = 8M </div><div class="line">read_buffer = 4M </div><div class="line">write_buffer = 4M</div></pre></td></tr></table></figure>
	

	
		<span class="different-posts"><a href="/2017/10/12/MySQL/7. MySQL性能调优my.cnf详解/" onclick="window.history.go(-1); return false;">⬅️ Go back </a></span>

	

</article>

	</main>

	<footer class="footer">
	<div class="footer-content">
		
	      <div class="footer__element">
	<p>Hi there, <br />welcome to my Blog glad you found it. Have a look around, will you?</p>
</div>

	    
	      <div class="footer__element">
	<h5>Check out</h5>
	<ul class="footer-links">
		<li class="footer-links__link"><a href="/archives">Archive</a></li>
		
		  <li class="footer-links__link"><a href="/atom.xml">RSS</a></li>
	    
		<li class="footer-links__link"><a href="/about">about page</a></li>
		<li class="footer-links__link"><a href="/tags">Tags</a></li>
		<li class="footer-links__link"><a href="/categories">Categories</a></li>
	</ul>
</div>

	    

		<div class="footer-credit">
			<span>© 2017 失落的乐章 | Powered by <a href="https://hexo.io/">Hexo</a> | Theme <a href="https://github.com/HoverBaum/meilidu-hexo">MeiliDu</a></span>
		</div>

	</div>


</footer>



</body>

</html>
